前言
Babel插件就是作用于抽象语法树。
首先我们编写的代码在编译阶段解析成抽象语法树(AST),然后经过一系列的遍历和转换,然后再将转换后的抽象语法树生成为常规的js代码。
介绍
AST可以方便计算机更好地理解我们的代码
它是Babel 转译的核心数据结构,后续的操作都依赖于 AST
举个例子:
1 | function add(x, y) { |
通过一个AST Explorer 在线工具,我们把代码转换成 AST
1 | { |
可以发现抽象语法树中不同层级有着相似的结构,比如:
1 | { |
像这样的结构叫做节点(Node)。一个AST是由多个或单个这样的节点组成,节点内部可以有多个这样的子节点,构成一颗语法树,这样就可以描述用于静态分析的程序语法。
节点中的type字段表示节点的类型,比如上述AST中的”Program”、”FunctionDeclaration”、”ExpressionStatement”等等,当然每种节点类型会有一些附加的属性用于进一步描述该节点类型。
除了类型属性,还额外生成了位置属性、值属性等,更好的描述每个节点。